package fun.chutianshu;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    //petList 对象，是一个边长数组类型容器 ArrayList
    //创建成一个静态字段
    //泛型，在一般的集合类对象定义时，都可以使用泛型
    // java 中的系统集合类，都是支持泛型的。
    //泛型的好处：不需要为每一种类型创建该类型特定的容器。
    // 比如，对一个列表来说，直接使用 List 即可，而不需要再创造字符串列表 StringList、整形列表 IntList等等多个不同的容器类型
    // 泛型在定义时，使用了一个通用替代符号T，代表任意类型 List<T> ,如果需要哪种具体的类型，在使用时，用具体类型，替代这个符号即可。
    // 如果想要创建一个字符串列表，只需要 List<String> 即可
    // 在这里，还是用了多态：不同Pet子类的对象，可以统一放在Pet 列表容器中，还可以通过统一的代码去操作不同的子类对象，实现多态效果。
    // 接口、父类 声明的对象名，可以用来获取实现了这个接口的类或继承自这个父类的子类的对象。

    public static List<Pet> petList=new ArrayList<>();

    public static void main(String[] args) {
	// write your code here
        System.out.println("欢迎光临宠物农场：");
        cmd_list();
    }

    //命令列表，表示主程序逻辑
    static void cmd_list(){
        do{
            System.out.println("老大，接下来要干啥？");
            System.out.println("请输入下面命令中任意一项：");
            System.out.println("命令：status   功能：查看农场状态");
            System.out.println("命令：new   功能：新增宠物");
            System.out.println("命令：quit   功能：退出游戏");
            Scanner sc = new Scanner(System.in);
            String next_move= sc.next();
            //进入分支，根据命令来进行相应的操作
            switch (next_move){
                //显示当前农场状态
                case "status":
                    showPets();
                    break;
                //创建宠物
                case "new":
                    createPet();
                    break;
                case "quit":
                    //退出游戏分支
                    System.out.println("Game Over!");
                    //用return 退出当前方法
                    return;
                default:
                    System.out.println("老大，你不认识字吗？敢敲个正确的命令不？");
            }
        }while (true);
    }
    static void createPet(){
        System.out.println("请选择要新增的宠物：1-龙，2-虎，3-凤，4-龟");
        Scanner sc = new Scanner(System.in);
        int petType=sc.nextInt();
        switch (petType){
            case 1:
                System.out.println("请输入宠物名字：");
                String petName=sc.next();
                System.out.println("请输入宠物初始生命：");
                int petHp=sc.nextInt();
                System.out.println("请输入宠物初始年龄：");
                int petAge=sc.nextInt();
                System.out.println("请输入宠物颜色：");
                String petColor=sc.next();
                System.out.println("请输入宠物初始攻击力：");
                int petAp=sc.nextInt();
                System.out.println("请输入宠物龙降雨量：");
                int petRp=sc.nextInt();
                petList.add(new Dragon(petAge,petName,petHp,petColor,petAp,petRp));
                System.out.println("创建宠物龙成功");
                break;
            case 2:
                System.out.println("请输入宠物名字：");
                petName=sc.next();
                System.out.println("请输入宠物初始生命：");
                petHp=sc.nextInt();
                System.out.println("请输入宠物初始年龄：");
                petAge=sc.nextInt();
                System.out.println("请输入宠物颜色：");
                petColor=sc.next();
                System.out.println("请输入宠物初始攻击力：");
                petAp=sc.nextInt();
                petList.add(new Tiger(petAge,petName,petHp,petColor,petAp));
                System.out.println("创建宠物虎成功");
                break;
            case 3:
                System.out.println("请输入宠物名字：");
                petName=sc.next();
                System.out.println("请输入宠物初始生命：");
                petHp=sc.nextInt();
                System.out.println("请输入宠物初始年龄：");
                petAge=sc.nextInt();
                System.out.println("请输入宠物颜色：");
                petColor=sc.next();
                System.out.println("请输入宠物初始攻击力：");
                petAp=sc.nextInt();
                petList.add(new Phenix(petAge,petName,petHp,petColor,petAp));
                System.out.println("创建宠物凤成功");
                break;
            case 4:
                System.out.println("请输入宠物名字：");
                petName=sc.next();
                System.out.println("请输入宠物初始生命：");
                petHp=sc.nextInt();
                System.out.println("请输入宠物初始年龄：");
                petAge=sc.nextInt();
                System.out.println("请输入宠物颜色：");
                petColor=sc.next();
                System.out.println("请输入宠物初始攻击力：");
                petAp=sc.nextInt();
                System.out.println("请输入宠物龟护甲值：");
                int shellNum=sc.nextInt();
                petList.add(new Turtle(petAge,petName,petHp,petColor,petAp,shellNum));
                System.out.println("创建宠物龟成功");
                break;
            default:
                System.out.println("创建失败，请输入数字1-4选择宠物类型，并根据提示输入正确的内容！");
        }
    }

    //显示农场状态
    static void showPets(){
        //输出宠物个数
        System.out.println("当前农场中共有"+petList.size()+"只宠物，分别为：");
        //遍历整个容器，输出每个宠物的信息
        for (Pet p:petList) {
            p.printPet();
        }

    }

}
